// Chrome 65兼容版本 - 移除所有ES6+语法，使用ES5语法重写

// 全局变量（使用var代替let/const）
var lastAlertTime = 0;
var alertCount = 0;
var isAlerting = false;
var unitPhoneMap = {};
var phoneDisplayInterval = null;
var isOffline = false;
var lastOnlineTime = Date.now();
var flashInterval = null;
var isFlashing = false;
var originalTitle = document.title;
var isMinimized = false;
var overlayInterval = null;
var focusCheckInterval = null;
var networkStatusInterval = null;
var alertSound = null;

console.log('Chrome 65兼容版 content.js 开始加载');
console.log('当前URL:', window.location.href);

// 配置参数（使用var代替const）
var ALERT_INTERVAL = 30000; // 30秒检查一次
var OFFLINE_THRESHOLD = 60000; // 60秒无响应视为掉线
var MAX_ALERT_COUNT = 5; // 最大连续提醒次数
var FLASH_DURATION = 15000; // 标题闪烁持续时间(ms)
var OVERLAY_DURATION = 15000; // 覆盖层自动消失时间(ms)

// 加载单位电话号码映射
function loadUnitPhoneMap () {
  unitPhoneMap = {
    '随州南站派出所': '015-86947',
    '枣阳站派出所': '015-84110',
    '襄阳东站派出所': '015-47110',
    '谷城北站派出所': '015-86937',
    '丹江口站派出所': '015-86955',
    '武当山西站派出所': '015-86958',
    '十堰东站派出所': '015-86110',
    '十堰站派出所': '015-78110',
    '随州站派出所': '015-81110',
    '陈家湖站派出所': '015-86978',
    '襄阳北站派出所': '015-42110',
    '襄州站派出所': '015-86769',
    '襄阳站派出所': '015-25110',
    '宜城站派出所': '015-56110',
    '荆门站派出所': '015-52110',
    '当阳站派出所': '015-59110',
    '宜昌站派出所': '015-55278',
    '松滋站派出所': '015-59628',
    '应城站派出所': '015-50266',
    '京山站派出所': '015-50218',
    '钟祥站派出所': '015-51110',
    '天门南站派出所': '051-77068',
    '潜江站派出所': '051-77088',
    '荆州站派出所': '015-61108',
    '枝江北站派出所': '015-61158',
    '宜昌东站派出所': '015-61558',
    '建始站派出所': '015-62558',
    '恩施站派出所': '015-62110',
    '利川站派出所': '015-62838',
    '南漳站派出所': '015-47528',
    '保康县站派出所': '015-47558',
    '兴山站派出所': '015-47541',
    '乘警支队': '015-20110'
  };
  console.log('已加载单位电话号码映射:', Object.keys(unitPhoneMap).length, '个单位');
  startPhoneDisplayMonitor();
}

// 智能匹配单位名称（兼容版本）
function findBestMatch (unitName) {
  if (!unitName) return null;

  // 直接匹配
  if (unitPhoneMap[unitName]) {
    return unitName;
  }

  var cleanName = unitName.trim();
  console.log('🔍 尝试匹配单位名称: "' + cleanName + '"');

  // 处理"武汉铁路公安局襄阳公安处xx车站派出所"格式
  var fullMatch = cleanName.match(/武汉铁路公安局襄阳公安处(.+?)车站派出所/);
  if (fullMatch) {
    var extractedStation = fullMatch[1].trim() + '站派出所';
    if (unitPhoneMap[extractedStation]) {
      return extractedStation;
    }
  }

  // 遍历映射表进行模糊匹配（使用传统方式，避免Object.entries）
  for (var key in unitPhoneMap) {
    if (unitPhoneMap.hasOwnProperty(key)) {
      var value = unitPhoneMap[key];
      // 移除常见后缀再匹配
      var cleanKey = key.replace(/(派出所|站|队|大队|中队|民警|公安民警|铁路民警)$/g, '');
      var cleanUnit = cleanName.replace(/(派出所|站|队|大队|中队|民警|公安民警|铁路民警|车站)$/g, '');

      if (cleanKey === cleanUnit || cleanKey.indexOf(cleanUnit) !== -1 || cleanUnit.indexOf(cleanKey) !== -1) {
        return key;
      }
    }
  }

  console.log('❌ 未找到匹配: "' + cleanName + '"');
  return null;
}

// 更新表格中处理单位列的显示，添加电话号码（兼容版本）
function updateUnitPhoneDisplay () {
  try {
    var table = document.getElementById('DataTables_Table_0');
    if (!table || !table.rows) {
      console.log('表格未找到或没有行数据');
      return;
    }

    console.log('更新电话号码显示 - 表格行数:', table.rows.length);

    // 遍历所有行，找到处理单位列（使用var代替let，增强兼容性）
    for (var i = 1; i < table.rows.length; i++) {
      // 跳过表头
      var row = table.rows[i];
      if (row.cells && row.cells.length >= 11) {
        // 确保至少有11列
        // 根据框架源代码，处理单位列是第11列（索引为10）
        var unitCell = row.cells[10];
        if (unitCell) {
          var cellText = unitCell.innerText.trim();

          // 检查是否已经更新过电话号码（避免重复更新）
          if (!unitCell.querySelector('.phone-info')) {
            // 使用智能匹配
            var matchedUnit = findBestMatch(cellText);

            if (matchedUnit) {
              var phone = unitPhoneMap[matchedUnit];

              // 更新单元格内容，显示单位名称和电话号码
              var newHTML = '<div style="font-weight: bold; font-size: 14px;">' + cellText + '</div>' +
                '<div class="phone-info" style="color: #007bff; font-size: 12px; margin-top: 4px; padding: 2px 4px; background: #e3f2fd; border-radius: 3px; display: inline-block;">' +
                '📞 ' + phone +
                '</div>';

              unitCell.innerHTML = newHTML;

              // 添加鼠标悬停提示
              unitCell.title = cellText + ' (' + matchedUnit + ')\n电话: ' + phone;

              console.log('✅ 匹配成功: "' + cellText + '" -> "' + matchedUnit + '" -> 电话: "' + phone + '"');
            } else {
              console.log('❌ 未找到匹配: "' + cellText + '"');
            }
          }
        }
      }
    }
  } catch (error) {
    console.log('更新处理单位列显示失败:', error);
    console.error('详细错误:', error);
  }
}

// 启动持续监控
function startPhoneDisplayMonitor () {
  if (phoneDisplayInterval) {
    clearInterval(phoneDisplayInterval);
  }
  // 使用传统函数调用方式，确保兼容性
  phoneDisplayInterval = setInterval(function () {
    updateUnitPhoneDisplay();
  }, 2000);
}

// 检查网络状态
function checkNetworkStatus () {
  try {
    // 检查页面是否能正常访问服务器
    $.ajax({
      url: 'http://10.4.192.46:8080/',
      method: 'HEAD',
      timeout: 3000,
      success: function () {
        lastOnlineTime = Date.now();

        if (isOffline) {
          // 恢复在线状态
          isOffline = false;
          showOnlineNotification();
          stopTitleFlash();
        }
      },
      error: function () {
        // 检查是否超过掉线阈值
        if (!isOffline && Date.now() - lastOnlineTime > OFFLINE_THRESHOLD) {
          isOffline = true;
          showOfflineNotification();
          startTitleFlash(true); // 启动掉线状态的标题闪烁
          playAlertSound(); // 播放掉线提示音
        }
      },
    });
  } catch (error) {
    console.error('检查网络状态失败:', error);
  }
}

//============== new 相关的内容==================

var monitor_server_url = 'http://localhost:5000';
var server_url = 'http://10.4.192.46:8080';

// 向通知端发送消息（兼容版本）
function sendNotificationToServer (title, message, type) {
  // 设置默认值（兼容方式）
  type = type || 'info';

  $.ajax({
    url: monitor_server_url + '/api/notifications',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    data: JSON.stringify({
      title: title,
      message: message,
      type: type
    }),
    timeout: 3000,
    success: function (data) {
      console.log('通知发送成功:', data);
    },
    error: function () {
      console.error('通知发送失败');
    },
  });

}
function sendNetworkStatusToMonitor (message, status) {
  $.ajax({
    url: monitor_server_url + '/api/network',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    data: JSON.stringify({
      message: message,
      status: status
    }),
    timeout: 3000,
    success: function (data) {
      console.log('网络状态发送成功:', data);
    },
    error: function () {
      console.error('网络状态发送失败');
    },
  });

}

// 服务端健康检查
function serverHealthCheck () {

  $.ajax({
    url: monitor_server_url + '/api/health',
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
    },
    timeout: 3000,
    success: function (data) {
      console.log('服务端健康检查成功:', data);
    },
    error: function () {
      console.error('服务端健康检查失败');
    },
  });

}

// 检测系统中是有有搜索条件，如果有则调用方法
function checkAndDoSearch () {
  console.log('检查是否存在setTodayXf和search函数');
  if (typeof window.setTodayXf === 'function') {
    console.log('存在setTodayXf函数, 然后进行调用该方法~');
    window.setTodayXf();
  }
  if (typeof window.search === 'function') {
    console.log('存在search函数, 然后进行调用该方法~');
    window.search();
  }
}

// 读取消息列表，查看是否有新的消息内容（兼容版本）
function checkDataTableMessage () {
  try {
    var table = document.getElementById('DataTables_Table_0');
    if (!table || !table.rows || table.rows.length <= 1) {
      console.log('表格不存在或没有数据行');
      return;
    }

    // 定义消息的存框，用来进行存储相关的数据内容
    var newMessages = [];
    for (var i = 1; i < table.rows.length; i++) {
      var row = table.rows[i];
      if (row && row.cells && row.cells.length >= 13) {
        // 检查状态列（第1列，索引0）和签收时间列（第12列，索引11）
        var statusCell = row.cells[0]; // 状态列
        var signTimeCell = row.cells[11]; // 签收时间列（分钟）
        var feedbackStatusCell = row.cells[12]; // 反馈状态列

        if (statusCell && signTimeCell && feedbackStatusCell) {
          var statusText = statusCell.innerText.trim();
          var signTimeText = signTimeCell.innerText.trim();
          var feedbackStatusText = feedbackStatusCell.innerText.trim();

          console.log('第' + i + '行 - 状态: "' + statusText + '", 签收时间: "' + signTimeText + '", 反馈状态: "' + feedbackStatusText + '"');

          var isUnsigned = statusText === '' ||
            statusText === '未签收' ||
            statusText.indexOf('未签收') !== -1 ||
            signTimeText === '' ||
            signTimeText === '0' ||
            signTimeText === '-';

          if (isUnsigned) {
            newMessages.push({
              idx: i,
              message: '发现未签收信息在第' + i + '行'
            });
            break; // 找到一个就触发提醒
          }
        }
      }
    }

    if (newMessages.length > 0) {
      triggerAlert(newMessages);
    } else {
      // 没有新消息，重置提醒计数
      alertCount = 0;
    }
  } catch (error) {
    console.error('检查新消息时出错:', error);
  }
}

// 开启新消息监控
function startNewMessageMonitor () {
  // 这里可以添加对新消息的监控逻辑
  // 使用传统函数代替箭头函数，增强兼容性
  setInterval(function () {
    checkAndDoSearch();
    setTimeout(function () {
      checkDataTableMessage();
    }, 2000);
  }, 1000 * 60 * Math.round(Math.random() * 1 + 1));
}

// 检测当前电脑的网络状态
function checkNetworkStatus (callback) {
  if (!navigator.onLine) {
    console.log('检测到网络离线');
    callback('网络连接异常！', 'error');
  }
}

var lastNetworkStatus = true;
// 网络状态监控（兼容版本）
function addNetworkStatusListener (callback) {
  // 这里可以添加网络状态变化的监听逻辑
  // 监听网络状态变化 (使用传统函数代替箭头函数，增强兼容性)
  window.addEventListener('online', function () {
    console.log('网络已连接');
    if (!lastNetworkStatus) {
      console.log('网络从离线恢复到在线');
      callback('网络已恢复', 'success');
    }
    lastNetworkStatus = true;
  });

  window.addEventListener('offline', function () {
    console.log('网络已断开');
    lastNetworkStatus = false;
    callback('网络已断开！', 'error');
  });
}

// 检测系统服务的状态
function checkServerStatus (callback) {

}

// 网络监控
function startNetworkMonitor () {
  addNetworkStatusListener(sendNetworkStatusToMonitor);
  // 使用传统函数代替箭头函数，增强兼容性
  setInterval(function () {
    checkNetworkStatus(sendNetworkStatusToMonitor);
  }, 60 * 1000);
}

// 检测是否有未登录标志（兼容版本）
function checkHasNoLoginFlage () {
  // 检测平台掉线错误弹窗（通用的invalid错误检测）
  var pageText = document.body.textContent;
  var lowerPageText = pageText.toLowerCase();

  // 检测各种包含"invalid"的错误信息 (使用indexOf代替includes，增强兼容性)
  var hasInvalidError =
    lowerPageText.indexOf('invalid') !== -1 &&
    (lowerPageText.indexOf('respond') !== -1 ||
      lowerPageText.indexOf('response') !== -1 ||
      lowerPageText.indexOf('data') !== -1 ||
      lowerPageText.indexOf('table') !== -1 ||
      lowerPageText.indexOf('request') !== -1 ||
      lowerPageText.indexOf('connection') !== -1 ||
      lowerPageText.indexOf('session') !== -1 ||
      lowerPageText.indexOf('timeout') !== -1);

  // 检测其他常见的错误关键词 (使用indexOf代替includes，增强兼容性)
  var hasErrorKeywords =
    lowerPageText.indexOf('error') !== -1 ||
    lowerPageText.indexOf('fail') !== -1 ||
    lowerPageText.indexOf('exception') !== -1 ||
    lowerPageText.indexOf('timeout') !== -1 ||
    lowerPageText.indexOf('connection') !== -1 ||
    lowerPageText.indexOf('网络错误') !== -1 ||
    lowerPageText.indexOf('连接失败') !== -1 ||
    lowerPageText.indexOf('请求失败') !== -1;

  // 同时检测其他可能的掉线特征 (使用indexOf代替includes，增强兼容性)
  var hasNotLoginText =
    pageText.indexOf('你可能尚未登录') !== -1 ||
    pageText.indexOf('尚未登录') !== -1 ||
    pageText.indexOf('请登录') !== -1 ||
    pageText.indexOf('需要登录') !== -1;

  // 检查URL是否跳转到登录页面 (使用indexOf代替includes，增强兼容性)
  var url = window.location.href.toLowerCase();
  var hasLoginPageUrl = url.indexOf('logina.jsp') !== -1 || url.indexOf('login.jsp') !== -1;

  // 综合判断掉线状态
  if (hasInvalidError || hasErrorKeywords || hasNotLoginText || hasLoginPageUrl) {
    // 检测到掉线特征
    console.log('🚨 检测到平台掉线！');
    console.log('🔍 掉线检测结果：');
    console.log('  - Invalid错误弹窗:', hasInvalidError);
    console.log('  - 通用错误关键词:', hasErrorKeywords);
    console.log('  - 未登录提示文本:', hasNotLoginText);
    console.log('  - 登录页面URL:', hasLoginPageUrl);

    // 显示检测到的错误信息
    if (hasInvalidError) {
      var invalidMatch = pageText.match(
        /.*?invalid.*?(?:respond|response|data|table|request|connection|session|timeout).*?/i
      );
      if (invalidMatch) {
        console.log('  - 检测到的Invalid错误:', invalidMatch[0]);
      }
    }
    // // 掉线时响铃提醒（增强版）
    // playLogoutAlarm();

    // 显示掉线通知
    var errorMessage = '平台已掉线！';
    if (hasInvalidError) {
      errorMessage += '检测到Invalid错误！';
    } else if (hasErrorKeywords) {
      errorMessage += '检测到系统错误！';
    } else {
      errorMessage += '检测到登录异常！';
    }
  } else {
    console.log('✅ 平台状态正常');
  }
}
// 登录状态监控
function startLoginMonitor () {
  // 使用传统函数代替箭头函数，增强兼容性
  setInterval(function () {
    checkHasNoLoginFlage();
  }, 30000);
}

// 初始化（兼容版本）
// 等待jQuery和DOM加载完成
function initializeWhenReady () {
  if (document.readyState === 'complete' || document.readyState === 'interactive') {
    console.log('DOM已加载完成，开始初始化');
    loadUnitPhoneMap();
    startNetworkMonitor();
    startLoginMonitor();
    startPhoneDisplayMonitor();
    startNewMessageMonitor();
  } else {
    setTimeout(initializeWhenReady, 100);
  }
}

// 开始初始化
initializeWhenReady();

// 监听来自后台脚本的消息（兼容版本）
chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) {
  if (message.type === 'checkNow') {
    checkDataTableMessage();
  } else if (message.type === 'showNotification') {
    createDesktopNotification(message.title, message.message);
    if (message.playSound) {
      playAlertSound();
    }
    if (message.flashTitle) {
      startTitleFlash(message.isCritical);
    }
  } else if (message.type === 'playSound') {
    playAlertSound();
  }
});

console.log('Chrome 65兼容版 content.js 已加载');

// Chrome 65兼容性增强功能

// 播放警报声（兼容Chrome 65版本）
function playAlertSound () {
  try {
    console.log('尝试播放警报声...');

    // 方法1: 使用HTML5 Audio
    var audio = document.getElementById('voice');
    if (audio) {
      console.log('使用HTML5 Audio播放警报声');
      audio.volume = 1.0;
      // 使用传统的Promise处理方式
      var playPromise = audio.play();
      if (playPromise) {
        playPromise.then(function () {
          console.log('HTML5音频播放成功');
        }).catch(function (e) {
          console.error('HTML5音频播放失败:', e);
        });
      }
    } else {
      // 方法2: 创建临时音频元素
      console.log('创建临时音频元素播放警报声');
      var tempAudio = new Audio('data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1fdJivrJBhNjVgodDbq2EcBj+a3/L1bJiwx1DUoNbxF6q7FVU5QChWTlRTcFP1XWCcE9uBhNGi8jK4O9f7gA');
      tempAudio.volume = 0.8;
      var tempPlayPromise = tempAudio.play();
      if (tempPlayPromise) {
        tempPlayPromise.then(function () {
          console.log('临时音频播放成功');
        }).catch(function (e) {
          console.error('临时音频播放失败:', e);
        });
      }
    }

    // 方法3: 使用设备震动作为备选方案
    if ('vibrate' in navigator) {
      navigator.vibrate([200, 100, 200]);
      console.log('使用设备震动作为替代提醒');
    }
  } catch (error) {
    console.error('音频播放过程中出错:', error);
  }
}

// 创建桌面通知（兼容版本）
function createDesktopNotification (title, message) {
  try {
    console.log('尝试创建桌面通知:', title);

    // 检查浏览器是否支持通知
    if (!('Notification' in window)) {
      console.warn('当前浏览器不支持桌面通知');
      showFallbackNotification(title, message);
      return;
    }

    // 检查权限状态
    if (Notification.permission === 'granted') {
      createNotification(title, message);
    } else if (Notification.permission === 'default') {
      // 请求权限
      Notification.requestPermission(function (permission) {
        console.log('权限请求结果:', permission);
        if (permission === 'granted') {
          console.log('获得桌面通知权限，创建通知');
          createNotification(title, message);
        } else {
          console.warn('用户拒绝了桌面通知权限，使用备选方案');
          showFallbackNotification(title, message);
        }
      });
    } else {
      console.warn('桌面通知权限被拒绝，使用备选方案');
      showFallbackNotification(title, message);
    }
  } catch (error) {
    console.error('桌面通知创建失败:', error);
    showFallbackNotification(title, message);
  }
}

// 创建通知的辅助函数（兼容版本）
function createNotification (title, message) {
  try {
    var notification = new Notification(title, {
      body: message,
      icon: '',
      tag: 'alert-notification',
      requireInteraction: true,
      silent: false
    });

    // 5秒后自动关闭通知
    setTimeout(function () {
      notification.close();
    }, 5000);

    console.log('桌面通知创建成功');
  } catch (error) {
    console.error('创建通知失败:', error);
    throw error;
  }
}

// 备选通知方案（兼容版本）
function showFallbackNotification (title, message) {
  try {
    console.log('使用备选通知方案');

    // 创建页面内通知
    var notification = document.createElement('div');
    notification.id = 'fallback-notification';
    notification.style.cssText = 'position: fixed; top: 20px; right: 20px; background: #ff4444; color: white; padding: 15px 20px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.3); z-index: 10000; max-width: 300px; font-weight: bold;';

    notification.innerHTML = '<div style="font-size: 16px; margin-bottom: 5px;">' + title + '</div>' +
      '<div style="font-size: 14px; opacity: 0.9;">' + message + '</div>' +
      '<button onclick="this.parentNode.remove()" style="position: absolute; top: 5px; right: 5px; background: none; border: none; color: white; font-size: 18px; cursor: pointer;">×</button>';

    document.body.appendChild(notification);

    // 5秒后自动移除
    setTimeout(function () {
      if (notification.parentNode) {
        notification.remove();
      }
    }, 5000);

    console.log('备选通知创建成功');
  } catch (error) {
    console.error('备选通知创建失败:', error);
  }
}

// 标题闪烁（兼容版本）
function startTitleFlash (isCritical) {
  if (isFlashing) return;

  isFlashing = true;
  var flashCount = 0;
  originalTitle = document.title;

  var alertTitles = isCritical ? [
    '🚨 平台掉线 - 请重新登录 🚨',
    '⚠️ 系统异常 - 需要处理 ⚠️',
    '🔥 连接中断 - 紧急提醒 🔥'
  ] : [
    '🚨 紧急预警 - 未签收信息 🚨',
    '⚠️ 重要提醒 - 请立即处理 ⚠️',
    '🔥 紧急事件 - 需要处理 🔥'
  ];

  flashInterval = setInterval(function () {
    if (flashCount % 2 === 0) {
      var randomTitle = alertTitles[Math.floor(Math.random() * alertTitles.length)];
      document.title = randomTitle;
    } else {
      document.title = originalTitle;
    }
    flashCount++;

    if (flashCount > 30) { // 15秒后停止
      clearInterval(flashInterval);
      document.title = originalTitle;
      isFlashing = false;
    }
  }, 500);
}

function stopTitleFlash () {
  if (flashInterval) {
    clearInterval(flashInterval);
    flashInterval = null;
    document.title = originalTitle;
    isFlashing = false;
  }
}

// 显示在线通知
function showOnlineNotification () {
  console.log('✅ 网络已恢复');
  createDesktopNotification('网络状态', '网络连接已恢复正常');
}

// 显示离线通知
function showOfflineNotification () {
  console.log('❌ 网络已断开');
  createDesktopNotification('网络警告', '检测到网络连接异常或系统掉线');
}

// 触发警报（兼容版本）
function triggerAlert (messages) {
  var now = Date.now();

  // 防止重复提醒（3秒内）
  if (now - lastAlertTime < 3000) {
    return;
  }

  lastAlertTime = now;
  alertCount++;

  console.log('🚨 触发第' + alertCount + '次終极预警: ' + new Date());

  // 播放警报声
  playAlertSound();

  // 桌面通知
  createDesktopNotification('🚨 紧急预警 🚨', '发现未签收信息，请立即处理！');

  // 标题闪烁
  startTitleFlash(false);

  // 发送消息到background script
  chrome.runtime.sendMessage({
    type: 'newMessage',
    messages: messages
  });
}
